Skip to content

Conversation

@negz
Copy link
Member

@negz negz commented Jan 15, 2026

Description of your changes

crossplane/crossplane#7022 adds support for composition functions to request OpenAPI schemas for resource kinds. This is useful when a function needs to validate resources against their schema, or introspect what fields a resource kind supports.

This PR updates the protobuf definitions and adds SDK helpers:

  • response.require_schema(rsp, name, api_version, kind) - declare a schema requirement
  • request.get_required_schema(req, name) - retrieve the resolved schema as a dict

The schema is returned as a plain dict rather than a wrapped type. This keeps the API simple and allows callers to pass it directly to validation libraries like openapi-schema-validator or jsonschema.

The docstrings for get_required_resources() and get_required_schema() now explain how to distinguish "not yet resolved" from "resolved but not found" using name in req.required_*.

I have:

negz added 2 commits February 5, 2026 15:18
Crossplane PR #7022 adds support for composition functions to request
OpenAPI schemas for resource kinds. When a function needs to validate
or introspect a resource's schema, it can request the schema from
Crossplane and receive it in subsequent invocations.

This commit updates the protobuf definitions from PR #7022 and adds
helper functions to work with schema requirements:

- response.require_schema() declares a schema requirement
- request.get_required_schema() retrieves the resolved schema

The schema is returned as a plain dict, allowing callers to use it
directly with validation libraries like openapi-schema-validator or
jsonschema.

Both get_required_resources() and get_required_schema() docstrings now
document how to distinguish between "not yet resolved" and "resolved
but not found" using the `name in req.required_*` pattern.

Ref: crossplane/crossplane#7022

Signed-off-by: Nic Cope <nicc@rk0n.org>
Crossplane v2.2 introduces capability advertisement. Crossplane sends
the capabilities it supports in the request metadata, allowing functions
to detect whether the calling Crossplane will honor particular request
or response fields (e.g. schema requirements, conditions).

This commit updates the protos to include the new Capability enum and
RequestMeta.capabilities field, and adds a request.has_capability helper
that checks whether a specific capability is present.

Signed-off-by: Nic Cope <nicc@rk0n.org>
@negz negz marked this pull request as ready for review February 5, 2026 23:28
@negz negz requested a review from bobh66 as a code owner February 5, 2026 23:28
@negz negz requested a review from iciclespider February 5, 2026 23:30
Functions need to know whether Crossplane will honor particular request
or response fields, like schema requirements. Crossplane v2.2 and later
advertise their capabilities in the request metadata, but older versions
don't advertise capabilities at all.

This commit adds two helpers. advertises_capabilities checks whether the
calling Crossplane advertises its capabilities. has_capability checks
whether a specific capability is present. Functions should check
advertises_capabilities first, since has_capability returns False both
when a capability is absent and when Crossplane predates capability
advertisement.

Signed-off-by: Nic Cope <nicc@rk0n.org>
@iciclespider
Copy link
Collaborator

I am most excited about the Capabilities part of this!

@negz negz merged commit 614d013 into crossplane:main Feb 6, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants